package main

import (
	"fmt"
	"function/exercise"
	"function/model1"
)

func testDo() {
	f, err := model1.Do("+")
	if err == nil {
		fmt.Printf("f(1, 2): %v\n", f(1, 2))
	} else {
		fmt.Printf("err: %v\n", err)
	}
}
func main() {
	fmt.Println("函数学习")
	/* model1.SayHello()
	fmt.Printf("model1.Sum(1, 2): %v\n", model1.Sum(1, 2))
	fmt.Printf("model1.SumPlus(1, 2, 3, 4, 5): %v\n", model1.SumPlus(1, 2, 3, 4, 5))
	fmt.Printf("model1.SumPlusPro(1, 2, 3, 4, 5, 6): %v\n", model1.SumPlusPro(1, 2, 3, 4, 5, 6)) */
	// model1.TestGlobalVar()
	// model1.TestLocalVal()
	// model1.TestGlobalAndLocal()
	// model1.Test1()
	// model1.FuncParamIsFunc()
	// testDo()
	// model1.AnonymousFunc()
	// model1.TestAddr()
	// model1.TestAddr2()
	// model1.TestMakeSuffixFunc()
	// model1.TestCalc()
	// model1.TestDefer()
	// model1.TestDefer2()
	// model1.TestCalc2()

	/*
		内置函数介绍

		内置函数	介绍
		close	主要用来关闭channel
		len	用来求长度，比如string、array、slice、map、channel
		new	用来分配内存，主要用来分配值类型，比如int、struct。返回的是指针
		make	用来分配内存，主要用来分配引用类型，比如chan、map、slice
		append	用来追加元素到数组、slice中
		panic和recover	用来做错误处理

	*/
	// model1.TestPanic()
	// model1.TestPanicAndRecover()
	exercise.DispatchCoin()
}
